{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "b8eefd91-c180-4791-af93-2b24c217257d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from scipy.stats import mannwhitneyu, spearmanr\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import numpy as np\n",
    "from statsmodels.sandbox.stats.multicomp import multipletests\n",
    "\n",
    "sns.set('talk')\n",
    "sns.set_style('whitegrid')\n",
    "\n",
    "def p_adjust(pvalues, method='fdr_bh'):\n",
    "    res = multipletests(pvalues, method=method)\n",
    "    return np.array(res[1], dtype=float)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "840135a8-d66d-4c69-899b-f283e432947e",
   "metadata": {
    "tags": []
   },
   "source": [
    "# Diversity assocations"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f56e9694-1a87-47cb-a219-1539b1d23057",
   "metadata": {},
   "source": [
    "## Read in data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1017910f-ba7e-4156-a510-6c2926d4caef",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SubmissionType</th>\n",
       "      <th>SampleNumber</th>\n",
       "      <th>SampleIDValidation</th>\n",
       "      <th>DiversigenCheckInSampleName</th>\n",
       "      <th>ReplacesLowVolumeSampleID</th>\n",
       "      <th>BoxLocation</th>\n",
       "      <th>SampleType</th>\n",
       "      <th>SampleSource</th>\n",
       "      <th>SequencingType</th>\n",
       "      <th>BabyN</th>\n",
       "      <th>...</th>\n",
       "      <th>median_mmNorm</th>\n",
       "      <th>median_mmNorm_DTAPHib</th>\n",
       "      <th>median_mmNorm_PCV</th>\n",
       "      <th>PT_protected</th>\n",
       "      <th>Dip_protected</th>\n",
       "      <th>FHA_protected</th>\n",
       "      <th>PRN_protected</th>\n",
       "      <th>TET_protected</th>\n",
       "      <th>PRP (Hib)_protected</th>\n",
       "      <th>VR_group</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SampleID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>233_A2_NS_A2_Extra</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>1004.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>233_A2_NS_A1</td>\n",
       "      <td>Box 10_D8</td>\n",
       "      <td>Nasal Swab</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>16S</td>\n",
       "      <td>233.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.177305</td>\n",
       "      <td>0.419887</td>\n",
       "      <td>0.165297</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107_V3_NS_A2</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>1005.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>107_V3_N!_A1</td>\n",
       "      <td>Box 10_D9</td>\n",
       "      <td>Nasal Swab</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>16S</td>\n",
       "      <td>107.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.449483</td>\n",
       "      <td>0.114018</td>\n",
       "      <td>0.958142</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209_V4_NS_A2</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>209_V4_NS_A1</td>\n",
       "      <td>Box 10_E1</td>\n",
       "      <td>Nasal Swab</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>16S</td>\n",
       "      <td>209.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.102041</td>\n",
       "      <td>0.105087</td>\n",
       "      <td>0.074972</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107_V4_NS_2a</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>1007.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box9_E2</td>\n",
       "      <td>Nasal Swab</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>16S</td>\n",
       "      <td>107.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.449483</td>\n",
       "      <td>0.114018</td>\n",
       "      <td>0.958142</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229_V2_NS_A1</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>1008.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 10_C8</td>\n",
       "      <td>Nasal Swab</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>16S</td>\n",
       "      <td>229.0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.186722</td>\n",
       "      <td>0.315442</td>\n",
       "      <td>0.158688</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 77 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                     SubmissionType  SampleNumber  SampleIDValidation  \\\n",
       "SampleID                                                                \n",
       "233_A2_NS_A2_Extra  Primary in Tube        1004.0                 NaN   \n",
       "107_V3_NS_A2        Primary in Tube        1005.0                 NaN   \n",
       "209_V4_NS_A2        Primary in Tube        1006.0                 NaN   \n",
       "107_V4_NS_2a        Primary in Tube        1007.0                 NaN   \n",
       "229_V2_NS_A1        Primary in Tube        1008.0                 NaN   \n",
       "\n",
       "                   DiversigenCheckInSampleName ReplacesLowVolumeSampleID  \\\n",
       "SampleID                                                                   \n",
       "233_A2_NS_A2_Extra                         NaN              233_A2_NS_A1   \n",
       "107_V3_NS_A2                               NaN              107_V3_N!_A1   \n",
       "209_V4_NS_A2                               NaN              209_V4_NS_A1   \n",
       "107_V4_NS_2a                               NaN                       NaN   \n",
       "229_V2_NS_A1                               NaN                       NaN   \n",
       "\n",
       "                   BoxLocation  SampleType  SampleSource SequencingType  \\\n",
       "SampleID                                                                  \n",
       "233_A2_NS_A2_Extra   Box 10_D8  Nasal Swab  Human Infant            16S   \n",
       "107_V3_NS_A2         Box 10_D9  Nasal Swab  Human Infant            16S   \n",
       "209_V4_NS_A2         Box 10_E1  Nasal Swab  Human Infant            16S   \n",
       "107_V4_NS_2a           Box9_E2  Nasal Swab  Human Infant            16S   \n",
       "229_V2_NS_A1         Box 10_C8  Nasal Swab  Human Infant            16S   \n",
       "\n",
       "                    BabyN  ...  median_mmNorm median_mmNorm_DTAPHib  \\\n",
       "SampleID                   ...                                        \n",
       "233_A2_NS_A2_Extra  233.0  ...       0.177305              0.419887   \n",
       "107_V3_NS_A2        107.0  ...       0.449483              0.114018   \n",
       "209_V4_NS_A2        209.0  ...       0.102041              0.105087   \n",
       "107_V4_NS_2a        107.0  ...       0.449483              0.114018   \n",
       "229_V2_NS_A1        229.0  ...       0.186722              0.315442   \n",
       "\n",
       "                    median_mmNorm_PCV PT_protected  Dip_protected  \\\n",
       "SampleID                                                            \n",
       "233_A2_NS_A2_Extra           0.165297         True           True   \n",
       "107_V3_NS_A2                 0.958142        False           True   \n",
       "209_V4_NS_A2                 0.074972        False           True   \n",
       "107_V4_NS_2a                 0.958142        False           True   \n",
       "229_V2_NS_A1                 0.158688         True           True   \n",
       "\n",
       "                   FHA_protected  PRN_protected TET_protected  \\\n",
       "SampleID                                                        \n",
       "233_A2_NS_A2_Extra          True           True          True   \n",
       "107_V3_NS_A2               False           True          True   \n",
       "209_V4_NS_A2               False          False          True   \n",
       "107_V4_NS_2a               False           True          True   \n",
       "229_V2_NS_A1                True          False          True   \n",
       "\n",
       "                   PRP (Hib)_protected  VR_group  \n",
       "SampleID                                          \n",
       "233_A2_NS_A2_Extra                True       NVR  \n",
       "107_V3_NS_A2                      True       NVR  \n",
       "209_V4_NS_A2                      True       NVR  \n",
       "107_V4_NS_2a                      True       NVR  \n",
       "229_V2_NS_A1                      True       NVR  \n",
       "\n",
       "[5 rows x 77 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nasal_meta = pd.read_csv('../data/metadata/nasal/nasal_metadata.csv', index_col='SampleID')\n",
    "nasal_meta['age_at_collection'] = (pd.to_datetime(nasal_meta['CollectionDate']) - pd.to_datetime(nasal_meta['DOB'])).dt.days\n",
    "nasal_meta = pd.concat([nasal_meta,\n",
    "                        pd.read_csv('../data/nasal/otu_alpha_diversity.csv', index_col='SampleID'),\n",
    "                        pd.read_csv('../data/nasal/otu_nmds_babies.csv', index_col='SampleID'),\n",
    "                        pd.read_csv('../data/metadata/nasal/nasal_titers_yr1.csv', index_col='SampleID')],\n",
    "                       axis=1)\n",
    "nasal_meta['VR_group'] = nasal_meta['VR_group'].fillna('Not Measured')\n",
    "nasal_meta = nasal_meta.dropna(subset=['VisitCode']) # this drops control samples since they don't have VisitCodes (e.g. MSA2002 and GD5)\n",
    "nasal_meta.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ab9a21c1-9944-49fd-89d4-14627a8bc77b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SubmissionType</th>\n",
       "      <th>SampleNumber</th>\n",
       "      <th>SampleIDValidation</th>\n",
       "      <th>DiversigenCheckInSampleName</th>\n",
       "      <th>BoxLocation</th>\n",
       "      <th>SampleType</th>\n",
       "      <th>SampleSource</th>\n",
       "      <th>SequencingType</th>\n",
       "      <th>BabyN</th>\n",
       "      <th>BabyN_checked</th>\n",
       "      <th>...</th>\n",
       "      <th>median_mmNorm</th>\n",
       "      <th>median_mmNorm_DTAPHib</th>\n",
       "      <th>median_mmNorm_PCV</th>\n",
       "      <th>PT_protected</th>\n",
       "      <th>Dip_protected</th>\n",
       "      <th>FHA_protected</th>\n",
       "      <th>PRN_protected</th>\n",
       "      <th>TET_protected</th>\n",
       "      <th>PRP (Hib)_protected</th>\n",
       "      <th>VR_group</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SampleID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>204_V5</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>204_S</td>\n",
       "      <td>Box 7, A1</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>204.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.363970</td>\n",
       "      <td>0.192730</td>\n",
       "      <td>0.371980</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>LVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>226_V1</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, A2</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>226.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.191269</td>\n",
       "      <td>0.205742</td>\n",
       "      <td>0.139576</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107_V3</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, A3</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>107.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.449483</td>\n",
       "      <td>0.114018</td>\n",
       "      <td>0.958142</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108_V3</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>4.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, A4</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>108.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.003102</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>LVR</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>109_V1</th>\n",
       "      <td>Primary in Tube</td>\n",
       "      <td>5.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Box 7, A5</td>\n",
       "      <td>Stool</td>\n",
       "      <td>Human Infant</td>\n",
       "      <td>MetaG</td>\n",
       "      <td>109.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>...</td>\n",
       "      <td>0.700925</td>\n",
       "      <td>0.763049</td>\n",
       "      <td>0.486810</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>NVR</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 88 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           SubmissionType  SampleNumber  SampleIDValidation  \\\n",
       "SampleID                                                      \n",
       "204_V5    Primary in Tube           1.0                 NaN   \n",
       "226_V1    Primary in Tube           2.0                 NaN   \n",
       "107_V3    Primary in Tube           3.0                 NaN   \n",
       "108_V3    Primary in Tube           4.0                 NaN   \n",
       "109_V1    Primary in Tube           5.0                 NaN   \n",
       "\n",
       "         DiversigenCheckInSampleName BoxLocation SampleType  SampleSource  \\\n",
       "SampleID                                                                    \n",
       "204_V5                         204_S   Box 7, A1      Stool  Human Infant   \n",
       "226_V1                           NaN   Box 7, A2      Stool  Human Infant   \n",
       "107_V3                           NaN   Box 7, A3      Stool  Human Infant   \n",
       "108_V3                           NaN   Box 7, A4      Stool  Human Infant   \n",
       "109_V1                           NaN   Box 7, A5      Stool  Human Infant   \n",
       "\n",
       "         SequencingType  BabyN  BabyN_checked  ... median_mmNorm  \\\n",
       "SampleID                                       ...                 \n",
       "204_V5            MetaG  204.0            NaN  ...      0.363970   \n",
       "226_V1            MetaG  226.0            NaN  ...      0.191269   \n",
       "107_V3            MetaG  107.0            NaN  ...      0.449483   \n",
       "108_V3            MetaG  108.0            NaN  ...      0.000000   \n",
       "109_V1            MetaG  109.0            NaN  ...      0.700925   \n",
       "\n",
       "          median_mmNorm_DTAPHib median_mmNorm_PCV  PT_protected Dip_protected  \\\n",
       "SampleID                                                                        \n",
       "204_V5                 0.192730          0.371980         False          True   \n",
       "226_V1                 0.205742          0.139576         False          True   \n",
       "107_V3                 0.114018          0.958142         False          True   \n",
       "108_V3                 0.000000          0.003102         False         False   \n",
       "109_V1                 0.763049          0.486810          True         False   \n",
       "\n",
       "         FHA_protected  PRN_protected TET_protected  PRP (Hib)_protected  \\\n",
       "SampleID                                                                   \n",
       "204_V5            True          False         False                False   \n",
       "226_V1            True           True          True                 True   \n",
       "107_V3           False           True          True                 True   \n",
       "108_V3           False          False         False                 True   \n",
       "109_V1           False           True          True                 True   \n",
       "\n",
       "          VR_group  \n",
       "SampleID            \n",
       "204_V5         LVR  \n",
       "226_V1         NVR  \n",
       "107_V3         NVR  \n",
       "108_V3         LVR  \n",
       "109_V1         NVR  \n",
       "\n",
       "[5 rows x 88 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stool_nmds = pd.read_csv('../data/stool/kraken_nmds_babies.csv', index_col='SampleID')\n",
    "stool_nmds.columns = ['kraken_' + i if i.startswith('MDS') else i for i in stool_nmds.columns]\n",
    "stool_ko_nmds = pd.read_csv('../data/stool/ko_nmds_babies.csv', index_col='SampleID')\n",
    "stool_ko_nmds.columns = ['ko_' + i if i.startswith('MDS') else i for i in stool_ko_nmds.columns]\n",
    "stool_meta = pd.concat([pd.read_csv('../data/metadata/stool/stool_metadata.csv', index_col='SampleID'),\n",
    "                        pd.read_csv('../data/stool/kraken_alpha_diversity.csv', index_col='SampleID'),\n",
    "                        stool_nmds,\n",
    "                        pd.read_csv('../data/stool/ko_alpha_diversity.csv', index_col='SampleID'),\n",
    "                        stool_ko_nmds,\n",
    "                        pd.read_csv('../data/metadata/stool/stool_titers_yr1.csv', index_col='SampleID')],\n",
    "                       axis=1)\n",
    "stool_meta = stool_meta.dropna(subset=['VisitCode'])\n",
    "stool_meta = stool_meta.query('`gt_2.5`')\n",
    "stool_meta.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3458549-3c60-4301-a41c-fb1a98b3bf3d",
   "metadata": {},
   "source": [
    "## Nasal"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5e2c92a5-5c11-441d-a954-adcdd72af59d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>stat</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>V1</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>3</td>\n",
       "      <td>18</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.079699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>V4</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>47.0</td>\n",
       "      <td>0.081771</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>V11</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7</td>\n",
       "      <td>45</td>\n",
       "      <td>220.0</td>\n",
       "      <td>0.097128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>V7</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11</td>\n",
       "      <td>54</td>\n",
       "      <td>204.0</td>\n",
       "      <td>0.105591</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>V6</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11</td>\n",
       "      <td>52</td>\n",
       "      <td>206.0</td>\n",
       "      <td>0.150048</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   timepoint     div_metric titer_measure  N_LVR  N_NVR   stat   p_value\n",
       "51        V1  simpson_e_div       LVR/NVR      3     18    9.0  0.079699\n",
       "3         V4           MDS1       LVR/NVR      5     12   47.0  0.081771\n",
       "59       V11           MDS2       LVR/NVR      7     45  220.0  0.097128\n",
       "29        V7           MDS2       LVR/NVR     11     54  204.0  0.105591\n",
       "46        V6  simpson_e_div       LVR/NVR     11     52  206.0  0.150048"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nasal_titer_assoc_rows = list()\n",
    "# for timepoint in ['V5', 'V6', 'V7', 'V9']:\n",
    "for timepoint in set([i for i in nasal_meta['VisitCode'] if i.startswith('V')]):\n",
    "    for div_metric in ['n_otus_div', 'simpson_e_div', 'shannon_div', 'MDS1', 'MDS2']:\n",
    "        N_LVR = len(nasal_meta.query(\"VisitCode == @timepoint & VR_group == 'LVR'\")[div_metric].dropna())\n",
    "        N_NVR = len(nasal_meta.query(\"VisitCode == @timepoint & VR_group == 'NVR'\")[div_metric].dropna())\n",
    "        if N_LVR > 2 and N_NVR > 2:\n",
    "            w_value, p_value = mannwhitneyu(nasal_meta.query(\"VisitCode == @timepoint & VR_group == 'LVR'\")[div_metric].values,\n",
    "                                            nasal_meta.query(\"VisitCode == @timepoint & VR_group == 'NVR'\")[div_metric].values,\n",
    "                                           nan_policy='omit')\n",
    "            nasal_titer_assoc_rows.append([timepoint, div_metric, 'LVR/NVR', N_LVR, N_NVR, w_value, p_value])\n",
    "nasal_titer_assocs = pd.DataFrame(nasal_titer_assoc_rows, columns=['timepoint', 'div_metric', 'titer_measure', 'N_LVR', 'N_NVR', 'stat', 'p_value']).sort_values('p_value')\n",
    "nasal_titer_assocs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c84a0c87-c61a-4fda-836b-71bb9bb762a8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>55</td>\n",
       "      <td>-0.535735</td>\n",
       "      <td>0.000030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>55</td>\n",
       "      <td>0.459858</td>\n",
       "      <td>0.000468</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>58</td>\n",
       "      <td>-0.430231</td>\n",
       "      <td>0.000837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>V10</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>55</td>\n",
       "      <td>0.385859</td>\n",
       "      <td>0.003956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>58</td>\n",
       "      <td>0.372909</td>\n",
       "      <td>0.004278</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   timepoint   div_metric      titer_measure   N         R   p_value\n",
       "44       V10         MDS2  median_mmNorm_PCV  55 -0.535735  0.000030\n",
       "32       V10   n_otus_div  median_mmNorm_PCV  55  0.459858  0.000468\n",
       "42       V10         MDS2      median_mmNorm  58 -0.430231  0.000837\n",
       "38       V10  shannon_div  median_mmNorm_PCV  55  0.385859  0.003956\n",
       "30       V10   n_otus_div      median_mmNorm  58  0.372909  0.004278"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nasal_titer_correls_rows = list()\n",
    "# for timepoint in ['V5', 'V6', 'V7', 'V9']:\n",
    "for timepoint in set([i for i in nasal_meta['VisitCode'] if i.startswith('V')]):\n",
    "    for div_metric in ['n_otus_div', 'simpson_e_div', 'shannon_div', 'MDS1', 'MDS2']:\n",
    "        for titer_measure in ['median_mmNorm', 'median_mmNorm_DTAPHib', 'median_mmNorm_PCV']:\n",
    "            N = len(nasal_meta.query(\"VisitCode == @timepoint\")[titer_measure].dropna())\n",
    "            if N > 3:\n",
    "                r_value, p_value = spearmanr(nasal_meta.query(\"VisitCode == @timepoint\")[div_metric].values,\n",
    "                                             nasal_meta.query(\"VisitCode == @timepoint\")[titer_measure].values,\n",
    "                                             nan_policy='omit')\n",
    "                nasal_titer_correls_rows.append([timepoint, div_metric, titer_measure, N, r_value, p_value])\n",
    "nasal_titer_correls = pd.DataFrame(nasal_titer_correls_rows, columns=['timepoint', 'div_metric', 'titer_measure', 'N', 'R', 'p_value']).sort_values('p_value')\n",
    "nasal_titer_correls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "6e7acb48-9ab5-4c73-a0ca-f948e0f87492",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.535735</td>\n",
       "      <td>0.000030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.459858</td>\n",
       "      <td>0.000468</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>58.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.430231</td>\n",
       "      <td>0.000837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.385859</td>\n",
       "      <td>0.003956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>58.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.372909</td>\n",
       "      <td>0.004278</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   body_site timepoint   div_metric      titer_measure  N_LVR  N_NVR     N  \\\n",
       "44     nasal       V10         MDS2  median_mmNorm_PCV    NaN    NaN  55.0   \n",
       "32     nasal       V10   n_otus_div  median_mmNorm_PCV    NaN    NaN  55.0   \n",
       "42     nasal       V10         MDS2      median_mmNorm    NaN    NaN  58.0   \n",
       "38     nasal       V10  shannon_div  median_mmNorm_PCV    NaN    NaN  55.0   \n",
       "30     nasal       V10   n_otus_div      median_mmNorm    NaN    NaN  58.0   \n",
       "\n",
       "    stat         R   p_value  \n",
       "44   NaN -0.535735  0.000030  \n",
       "32   NaN  0.459858  0.000468  \n",
       "42   NaN -0.430231  0.000837  \n",
       "38   NaN  0.385859  0.003956  \n",
       "30   NaN  0.372909  0.004278  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nasal_col_order = ['body_site', 'timepoint', 'div_metric', 'titer_measure', 'N_LVR', 'N_NVR', 'N', 'stat', 'R', 'p_value']\n",
    "nasal_titer_stats = pd.concat([nasal_titer_assocs, nasal_titer_correls]).sort_values('p_value')\n",
    "nasal_titer_stats['body_site'] = 'nasal'\n",
    "nasal_titer_stats = nasal_titer_stats[nasal_col_order]\n",
    "nasal_titer_stats.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e930c32c-d338-47c2-8bc1-d589bd119c25",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.535735</td>\n",
       "      <td>0.000030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.459858</td>\n",
       "      <td>0.000468</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>58.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.430231</td>\n",
       "      <td>0.000837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.385859</td>\n",
       "      <td>0.003956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>58.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.372909</td>\n",
       "      <td>0.004278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V1</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.459740</td>\n",
       "      <td>0.036008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.272346</td>\n",
       "      <td>0.046334</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint     div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "44      nasal       V10           MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "32      nasal       V10     n_otus_div      median_mmNorm_PCV    NaN    NaN   \n",
       "42      nasal       V10           MDS2          median_mmNorm    NaN    NaN   \n",
       "38      nasal       V10    shannon_div      median_mmNorm_PCV    NaN    NaN   \n",
       "30      nasal       V10     n_otus_div          median_mmNorm    NaN    NaN   \n",
       "154     nasal        V1  simpson_e_div  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "41      nasal       V10           MDS1      median_mmNorm_PCV    NaN    NaN   \n",
       "\n",
       "        N  stat         R   p_value  \n",
       "44   55.0   NaN -0.535735  0.000030  \n",
       "32   55.0   NaN  0.459858  0.000468  \n",
       "42   58.0   NaN -0.430231  0.000837  \n",
       "38   55.0   NaN  0.385859  0.003956  \n",
       "30   58.0   NaN  0.372909  0.004278  \n",
       "154  40.0   NaN  0.459740  0.036008  \n",
       "41   55.0   NaN -0.272346  0.046334  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nasal_titer_stats.query('p_value < .05')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a52b641-c734-464d-b867-d495db1ca82d",
   "metadata": {},
   "source": [
    "## Stool"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2f7b8c7d-5624-4c5e-b3ec-ea9512e53060",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>stat</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>V7</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11</td>\n",
       "      <td>39</td>\n",
       "      <td>321.0</td>\n",
       "      <td>0.013037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>V11</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5</td>\n",
       "      <td>22</td>\n",
       "      <td>18.0</td>\n",
       "      <td>0.019051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>V11</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5</td>\n",
       "      <td>22</td>\n",
       "      <td>18.0</td>\n",
       "      <td>0.019051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>V2</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6</td>\n",
       "      <td>33</td>\n",
       "      <td>157.0</td>\n",
       "      <td>0.022321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>V2</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6</td>\n",
       "      <td>33</td>\n",
       "      <td>43.0</td>\n",
       "      <td>0.028014</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    timepoint      div_metric titer_measure  N_LVR  N_NVR   stat   p_value\n",
       "50         V7  genus_richness       LVR/NVR     11     39  321.0  0.013037\n",
       "119       V11         ko_MDS2       LVR/NVR      5     22   18.0  0.019051\n",
       "112       V11   genus_shannon       LVR/NVR      5     22   18.0  0.019051\n",
       "78         V2         ko_MDS1       LVR/NVR      6     33  157.0  0.022321\n",
       "74         V2     ko_evenness       LVR/NVR      6     33   43.0  0.028014"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stool_titer_assoc_rows = list()\n",
    "# for timepoint in ['V5', 'V6', 'V7', 'V9']:\n",
    "for timepoint in set([i for i in stool_meta['VisitCode'] if i.startswith('V')]):\n",
    "    for div_metric in ['genus_richness', 'genus_evenness', 'genus_shannon', 'ko_richness', 'ko_evenness', 'ko_shannon', 'kraken_MDS1', 'kraken_MDS2', 'ko_MDS1', 'ko_MDS2']:\n",
    "        N_LVR = len(stool_meta.query(\"VisitCode == @timepoint & VR_group == 'LVR'\")[div_metric].dropna())\n",
    "        N_NVR = len(stool_meta.query(\"VisitCode == @timepoint & VR_group == 'NVR'\")[div_metric].dropna())\n",
    "        if N_LVR > 2 and N_NVR > 2:\n",
    "            w_value, p_value = mannwhitneyu(stool_meta.query(\"VisitCode == @timepoint & VR_group == 'LVR'\")[div_metric].values,\n",
    "                                            stool_meta.query(\"VisitCode == @timepoint & VR_group == 'NVR'\")[div_metric].values,\n",
    "                                            nan_policy='omit')\n",
    "            stool_titer_assoc_rows.append([timepoint, div_metric, 'LVR/NVR', N_LVR, N_NVR, w_value, p_value])\n",
    "stool_titer_assocs = pd.DataFrame(stool_titer_assoc_rows, columns=['timepoint', 'div_metric', 'titer_measure', 'N_LVR', 'N_NVR', 'stat', 'p_value']).sort_values('p_value')\n",
    "stool_titer_assocs.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1198d99d-1ed8-4844-8489-b88bf3201148",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>43</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>42</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.004630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>42</td>\n",
       "      <td>0.376388</td>\n",
       "      <td>0.014020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>45</td>\n",
       "      <td>-0.360627</td>\n",
       "      <td>0.014950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>43</td>\n",
       "      <td>-0.360163</td>\n",
       "      <td>0.017674</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    timepoint      div_metric          titer_measure   N         R   p_value\n",
       "124        V5  genus_evenness  median_mmNorm_DTAPHib  43 -0.501134  0.000619\n",
       "207        V9         ko_MDS2          median_mmNorm  42  0.428571  0.004630\n",
       "192        V9     ko_evenness          median_mmNorm  42  0.376388  0.014020\n",
       "283        V6     ko_evenness  median_mmNorm_DTAPHib  45 -0.360627  0.014950\n",
       "147        V5         ko_MDS2          median_mmNorm  43 -0.360163  0.017674"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stool_titer_correls_rows = list()\n",
    "# for timepoint in ['V5', 'V6', 'V7', 'V9']:\n",
    "for timepoint in set([i for i in stool_meta['VisitCode'] if i.startswith('V')]):\n",
    "    for div_metric in ['genus_richness', 'genus_evenness', 'genus_shannon', 'ko_richness', 'ko_evenness', 'ko_shannon', 'kraken_MDS1', 'kraken_MDS2', 'ko_MDS1', 'ko_MDS2']:\n",
    "        for titer_measure in ['median_mmNorm', 'median_mmNorm_DTAPHib', 'median_mmNorm_PCV']:\n",
    "            N = len(stool_meta.query(\"VisitCode == @timepoint\")[titer_measure].dropna())\n",
    "            if N > 3:\n",
    "                r_value, p_value = spearmanr(stool_meta.query(\"VisitCode == @timepoint\")[div_metric].values,\n",
    "                                             stool_meta.query(\"VisitCode == @timepoint\")[titer_measure].values,\n",
    "                                             nan_policy='omit')\n",
    "                stool_titer_correls_rows.append([timepoint, div_metric, titer_measure, N, r_value, p_value])\n",
    "stool_titer_correls = pd.DataFrame(stool_titer_correls_rows, columns=['timepoint', 'div_metric', 'titer_measure', 'N', 'R', 'p_value']).sort_values('p_value')\n",
    "stool_titer_correls.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "242e75e1-c1bf-4b62-aedb-db64dfc3137f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.004630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>321.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.013037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.376388</td>\n",
       "      <td>0.014020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>45.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360627</td>\n",
       "      <td>0.014950</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "124     stool        V5  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "207     stool        V9         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "50      stool        V7  genus_richness                LVR/NVR   11.0   39.0   \n",
       "192     stool        V9     ko_evenness          median_mmNorm    NaN    NaN   \n",
       "283     stool        V6     ko_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "\n",
       "        N   stat         R   p_value  \n",
       "124  43.0    NaN -0.501134  0.000619  \n",
       "207  42.0    NaN  0.428571  0.004630  \n",
       "50    NaN  321.0       NaN  0.013037  \n",
       "192  42.0    NaN  0.376388  0.014020  \n",
       "283  45.0    NaN -0.360627  0.014950  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stool_col_order = ['body_site', 'timepoint', 'div_metric', 'titer_measure', 'N_LVR', 'N_NVR', 'N', 'stat', 'R', 'p_value']\n",
    "stool_titer_stats = pd.concat([stool_titer_assocs, stool_titer_correls]).sort_values('p_value')\n",
    "stool_titer_stats['body_site'] = 'stool'\n",
    "stool_titer_stats = stool_titer_stats[stool_col_order]\n",
    "stool_titer_stats.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "548f02c2-f678-4102-afba-af83e3bdaa6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.004630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>321.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.013037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.376388</td>\n",
       "      <td>0.014020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>45.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360627</td>\n",
       "      <td>0.014950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360163</td>\n",
       "      <td>0.017674</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>stool</td>\n",
       "      <td>V11</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.019051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>stool</td>\n",
       "      <td>V11</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.019051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.356053</td>\n",
       "      <td>0.019110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.366604</td>\n",
       "      <td>0.019979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.355968</td>\n",
       "      <td>0.020686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>stool</td>\n",
       "      <td>V2</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>157.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.022321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.582143</td>\n",
       "      <td>0.022794</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.345434</td>\n",
       "      <td>0.025053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.571429</td>\n",
       "      <td>0.026063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>stool</td>\n",
       "      <td>V2</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.028014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>stool</td>\n",
       "      <td>V2</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>154.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.031271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>stool</td>\n",
       "      <td>V10</td>\n",
       "      <td>ko_richness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>32.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.380180</td>\n",
       "      <td>0.031842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.553571</td>\n",
       "      <td>0.032287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>166</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.294932</td>\n",
       "      <td>0.037596</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.539286</td>\n",
       "      <td>0.038022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.331377</td>\n",
       "      <td>0.039327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>4.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>38.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.039560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>stool</td>\n",
       "      <td>V11</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.039663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.327126</td>\n",
       "      <td>0.042079</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.514286</td>\n",
       "      <td>0.049839</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "124     stool        V5  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "207     stool        V9         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "50      stool        V7  genus_richness                LVR/NVR   11.0   39.0   \n",
       "192     stool        V9     ko_evenness          median_mmNorm    NaN    NaN   \n",
       "283     stool        V6     ko_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "147     stool        V5         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "119     stool       V11         ko_MDS2                LVR/NVR    5.0   22.0   \n",
       "112     stool       V11   genus_shannon                LVR/NVR    5.0   22.0   \n",
       "148     stool        V5         ko_MDS2  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "149     stool        V5         ko_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "186     stool        V9   genus_shannon          median_mmNorm    NaN    NaN   \n",
       "78      stool        V2         ko_MDS1                LVR/NVR    6.0   33.0   \n",
       "21      stool        V4     kraken_MDS2          median_mmNorm    NaN    NaN   \n",
       "183     stool        V9  genus_evenness          median_mmNorm    NaN    NaN   \n",
       "4       stool        V4  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "74      stool        V2     ko_evenness                LVR/NVR    6.0   33.0   \n",
       "76      stool        V2     kraken_MDS1                LVR/NVR    6.0   33.0   \n",
       "69      stool       V10     ko_richness          median_mmNorm    NaN    NaN   \n",
       "3       stool        V4  genus_evenness          median_mmNorm    NaN    NaN   \n",
       "166     stool        V7      ko_shannon  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "27      stool        V4         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "209     stool        V9         ko_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "0       stool        V4  genus_richness                LVR/NVR    4.0   11.0   \n",
       "111     stool       V11  genus_evenness                LVR/NVR    5.0   22.0   \n",
       "194     stool        V9     ko_evenness      median_mmNorm_PCV    NaN    NaN   \n",
       "23      stool        V4     kraken_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "\n",
       "        N   stat         R   p_value  \n",
       "124  43.0    NaN -0.501134  0.000619  \n",
       "207  42.0    NaN  0.428571  0.004630  \n",
       "50    NaN  321.0       NaN  0.013037  \n",
       "192  42.0    NaN  0.376388  0.014020  \n",
       "283  45.0    NaN -0.360627  0.014950  \n",
       "147  43.0    NaN -0.360163  0.017674  \n",
       "119   NaN   18.0       NaN  0.019051  \n",
       "112   NaN   18.0       NaN  0.019051  \n",
       "148  43.0    NaN -0.356053  0.019110  \n",
       "149  40.0    NaN -0.366604  0.019979  \n",
       "186  42.0    NaN  0.355968  0.020686  \n",
       "78    NaN  157.0       NaN  0.022321  \n",
       "21   15.0    NaN -0.582143  0.022794  \n",
       "183  42.0    NaN  0.345434  0.025053  \n",
       "4    15.0    NaN -0.571429  0.026063  \n",
       "74    NaN   43.0       NaN  0.028014  \n",
       "76    NaN  154.0       NaN  0.031271  \n",
       "69   32.0    NaN -0.380180  0.031842  \n",
       "3    15.0    NaN -0.553571  0.032287  \n",
       "166  50.0    NaN -0.294932  0.037596  \n",
       "27   15.0    NaN -0.539286  0.038022  \n",
       "209  39.0    NaN  0.331377  0.039327  \n",
       "0     NaN   38.0       NaN  0.039560  \n",
       "111   NaN   22.0       NaN  0.039663  \n",
       "194  39.0    NaN  0.327126  0.042079  \n",
       "23   15.0    NaN -0.514286  0.049839  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stool_titer_stats.query('p_value < .05')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "4aa67a50-5300-4628-948d-4741af77cc87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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vO1LWFgYOnbsiOXLl2PLli3o0KEDGjRoABcXl3KvmTFjhtTbEREREVkVyUHUtGnTIJPJIAgCUlNTcevWrXLTCoIAmUzGIIqIiIjshuQgqnPnzuYsBxEREZFNkRxEbdq0yZzlICIiIrIpXLGciIiISALJPVEl5eTk4Pjx47h27RoePHiAOXPmoKCgAH/99Re6dOlijlsQERERWZUqBVGCIGDVqlXYsGED1Gq14ficOXNw8+ZNTJ48Ge3bt8eaNWvg5eVV5cISERERWYsqDefNnj0bX331FfLz81GvXj24uroazmVnZ0MQBFy4cAETJ05Efn5+lQtLREREZC0kB1EHDhxAZGQkvLy88O233+L48eNo3bq14fyjjz6KLVu2wNvbG9euXcPGjRvNUmAiIiIiayA5iPrpp58gk8nw6aefolevXkbTPProo/j8888hCAL2798vuZBERERE1kZyEHX58mU0atQIXbt2rTBdp06dEBAQgOTkZKm3IiIiIrI6koMolUqFevXqiUrr5eWFoqIiqbciIiIisjqSgygfHx9cv34dgiBUmE6j0SA5ORk+Pj5Sb0VERERkdSQHUV26dIFKpcLWrVsrTPfDDz/gwYMH6NSpk9RbEREREVkdyetETZkyBb/99huWLVsGrVaLJ598stT5zMxMbNq0Cd988w0cHBwwYcKEKhU0KSkJa9aswdmzZ5GZmQk/Pz8MGTIE06dPh5ubm0l5qVQqrF+/Hvv378eNGzfg4OCANm3aYNKkSXj88cerVE4iIiKqHST3RLVu3Rrvv/8+NBoNlixZgu7du+P8+fMAgG7duqFnz55Yu3YtdDod3njjDbRr105yIS9evIhRo0YhMjISPj4+6Nu3L1QqFb7++ms888wzyM3NFZ3X3bt3MXbsWKxatQr37t1Dz549ERwcjHPnzmHGjBn4/vvvJZeTiIiIao8qLbY5fvx4rF27FsHBwRAEwfAvKysLgiCgSZMmWLFiBV555RXJ9ygqKsKsWbOgUqmwaNEi7NixAytXrsQff/yB/v37Iy4uDitWrBCd37x585CQkIDBgwcjKioKa9aswY8//oj169dDoVDg448/xq1btySXl4iIiGqHKu+d17t3b/Tu3Rupqam4evUqHjx4AFdXVzRv3hwtW7ascgH37NmDlJQUdOvWDWPGjDEcd3FxweLFi9G/f39s374dM2bMgKenZ4V5Xbx4EYcOHUKTJk2wfPlyODs7G851794do0aNwtGjR3H58mX4+/tXuexERERkvyQHUadPn0adOnUMq5QHBAQgICDAaNqjR4/i+vXrGD9+vMn3iYqKAgAMGjSozLn69esjPDwc0dHROHLkCIYNG1ZhXr///jsAYOLEiaUCKL2FCxeaXD4iIiKqnSQHURMnTkSnTp2wefPmStN+/vnnkoOo+Ph4AEBwcLDR80FBQYiOjsaVK1cqDaIuX74MAGjfvj1UKhX279+PS5cuQavVIiwsDMOGDYOLi4vJZayMIAjQarVmz7ekkvlb+l61BevU/Fin5sc6NT/WqfnZWp1WtnyTnqggKjc3F1lZWWWOq9VqpKSkVFiI1NRUXLt2TXSBHpaeng4A8PX1NXq+YcOGpdJVRL9qelZWFoYNG4bU1FTDuR9//BFfffUVvv76a7Rq1UpSWcuTn5+PCxcumDXPily6dKna7lVbsE7Nj3VqfqxT82Odmp891amoICovLw9PPvkkCgoKDMdkMhliYmLw2GOPibpR+/btJRVQpVIBQLk9RPrj+nQV0T/F984778Df3x+bN29GmzZtcPPmTXzyySc4cuQIXnrpJfz222/w8PCQVF4iIiKqHUQFUb6+vpgyZQq++uorwzGZTCa6d8nf3x/z58+XVEC5XA6dTgeZTFZhOjFl0QeBTk5O2Lhxo2EieuvWrfH1119j5MiRiI+Px48//ogXX3xRUnmNcXV1LXc40ly0Wq0hug8LC4NcLrfo/WoD1qn5sU7Nj3VqfqxT87O1Oo2Li0N+fn6l6UTPiXr11VcNT8cJgoCBAwciLCwMn3/+ebnXODg4wM3NrdKn5iri7u6O7Ozscl+MWq0GUByoVMbFxQV5eXkYMWJEmTI5OjrimWeewcKFC3H8+HGzBlEymaxaG4xcLrf6BmprWKfmxzo1P9ap+bFOzc8W6rSyjhs90UGUQqEo9fRd586dERwcXO4TeebSsGFDZGdnIyMjA40bNy5zXj8XSj83qiI+Pj7Iy8tDYGCg0fP648bmfxERERGVJPnpvE2bNpmzHOUKDg5GfHw8EhIS0LFjxzLnExISDOnE5HX9+nWkpaUZPZ+RkQEA8PLyqkKJiYiIqDYQtWK5TqeDTqczesyUf1L06dMHALB///4y57KysnDy5EkoFAr06NGj0rz69u0LoHi9KI1GU+b8//3f/wEo3lyZiIiIqCKieqJCQkLg4OCAPXv2oHnz5gCA0NBQk24kk8kQGxtrcgEHDRoEf39/HD16FFu2bDGsNaVWqzFv3jyoVCo8++yz8PHxMVyj0Whw48YNAECTJk2gUCgAAEOHDsWXX36J5ORkLFy4EAsWLDCc27FjB/bv3w9PT0+MHj3a5HISERFR7SJ6OO/hniSp6z6ZysXFBUuXLsW0adOwcOFCREREIDAwEOfPn0d6ejpCQkLwzjvvlLomLS0NQ4cOBQAcPHjQMNfJ1dUVX3zxBV588UVs374dhw4dwiOPPILr168jPj4ezs7OWLp0Kby9vavltREREZHtEhVEbdy4EQBK7SenP1YdwsPDsWPHDqxevRqnTp1CQkICAgMDMWbMGEydOtWkNZ3atm2LyMhIrF27FtHR0Th06BDq1auHJ554AtOmTTNsY0NERERUEVFB1KlTp+Dv719qrlB1zxtSKpVYuXKlqLSBgYGIi4sr93yDBg0wf/58yWtXEREREYmaWL569WpERERYuixERERENkNUEEVEREREpTGIIiIiIpKAQRQRERGRBAyiiIiIiCQQvU7U9evXMXfuXMk3kslkWLx4seTriYiIiKyJ6CAqMzMTv/zyi6SbCILAIIqIiIjsiuggysPDgwtREhEREf2P6CBKqVRi06ZNliwLERERkc3gxHIiIiIiCRhEEREREUnAIIqIiIhIAgZRRERERBKImlg+cuRINGvWzMJFISIiIrIdooKoJUuWWLocRERERDaFw3lEREREEjCIIiIiIpKAQRQRERGRBAyiiIiIiCRgEEVEREQkAYMoIiIiIglEb0BcGbVajeTkZKjVatStWxdNmzaFXC43V/ZEREREVqXKQdSJEyfwzTff4NSpU9BqtYbjzs7O6N27N1599VW0bt26qrchIiIisipVGs5bvXo1pkyZgmPHjqGoqAiCIBj+qdVqHDhwAOPGjcPevXvNVV4iIiIiqyC5J+rYsWNYvXo1AGD48OEYN24cgoOD4e7ujgcPHiA2NhYbN25EdHQ05syZg6CgICiVSrMVnIiIiKgmSe6J2rhxI2QyGWbOnImPP/4YnTp1Qp06deDg4ABPT09069YNX331FaZMmQKNRoO1a9eas9xERERENUpyEHX+/Hl4eXlh2rRpFaabNWsWPD09ceLECam3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w7klS5ZgwoQJ+Pbbb3Hw4EG0atUKf//9N27cuIGAgAB89NFH1fr6qOrkcodS2wvYA1t/TeWVX6vVVmm5BVuvF0vRarVIT0+Dv38jeHu6sm6IqolN/DwJDw/Hjh07MHjwYNy6dQuHDh1CnTp18Oqrr2LTpk3w8PAQnVerVq3w888/Y9SoUXjw4AGio6MBABMnTsT27dvLXYiTiIiIqCSr74nSUyqVWLlypai0gYGBiIuLK/d8QEAAlixZYq6iERERUS1kEz1RRERERNaGQRQRERGRBAyiiIiIiCRgEEVEREQkAYMoIiIiIgkYRBERERFJIBMEQajpQtirCxcuQKvVQiaTwdXVsovfCYKA/Px8AICrq6voHaipfKxT82Odmh/r1PxYp+Zna3Wan58PQRAgl8vRvn37ctPZzDpRtki/P58gCFCpVNV2X31DJfNhnZof69T8WKfmxzo1P1uq04f32X0YgygLUigU0Gg0cHBwgLOzc00Xh4iIiEQoKCiATqcz7L1bHg7nEREREUnAieVEREREEjCIIiIiIpKAQRQRERGRBAyiiIiIiCRgEEVEREQkAYMoIiIiIgkYRBERERFJwCCKiIiISAIGUUREREQSMIgiIiIikoBBFBEREZEEDKKIiIiIJGAQRURERCQBgygiIiIiCRhEEREREUngWNMFqE2SkpKwZs0anD17FpmZmfDz88OQIUMwffp0uLm5mZRXWloavvzySxw7dgx37tyBj48P+vfvj9deew1eXl5Gr7l06RK+/PJLXL58Gffv30fjxo0xYsQITJ48GQqFokz6FStWYO3ateWWoW/fvhWerw41XaclnTlzBhMnTsQ777yDqVOnlptu79692LhxI65duwatVovWrVtj8uTJeOyxx0wqr6XYWp2ynVZcp0VFRfjxxx+xe/duJCQkoLCwEL6+vujduzemT58OPz8/o/dhOzVvnbKdVlynOp0OO3bswI4dO3D16lU4ODigZcuWGDFiBJ555hk4OhoPV2q6ncoEQRCq5U613MWLFzF58mSoVCq0a9cOjRo1wrlz55CRkYHg4GBs3boVHh4eovJKSUnBs88+i4yMDCiVSjRv3hyxsbFISUmBn58ffvrppzJv4ujoaLz++uvQ6XTo1KkT6tati9OnTyMnJwc9evTA2rVrywRSU6dOxdGjR9GvXz+jZQsJCcELL7wg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byQnJxs2NQaK95nr1q0bfvjhB5w5cwZXrlxB3bp10a1bN4wYMcKwVk5JMpkM//73vzFw4EBs27YNFy5cwN9//4369eujX79+GDNmjGFDZHNp1KgR1q5di5iYGERGRuL06dO4ceMG0tLS4OHhgebNm+ORRx4xLEZp7EktmUyGDz/8EIMHD8aPP/5oKLezszPat2+PYcOG4emnnxYdaFSmTZs22LlzJ7766iucOHEC165dg5+fH1544QW8+uqrWLduXZlr5HI51qxZg23btuH3339HYmKi4W/Ss2dPDB8+3NAbYir9/DYxCgoKjB4fPXo0lixZAnd39wontvfp0wd79uzB999/jyNHjiApKQlarRYBAQHo0aMHXnjhBaNPW1Ynqe3h5ZdfRlBQELZv346YmBjEx8fDxcUFbdq0waBBgzBx4sRSPcANGzbEzp078d133+HIkSNISUnB7du34e3tjSeeeAITJkwwuj4X1V4ywRzP+hIRERHVMpwTRURERCQBgygiIiIiCRhEEREREUnAIIqIiIhIAgZRRERERBIwiCIiIiKSgEEUERERkQQMooiIiIgkYBBFREREJAGDKCIiIiIJGEQRERERScAgioiIiEgCBlFEREREEvw/AqiGU4/0KuwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.scatterplot(x='genus_evenness',\n",
    "                y='median_mmNorm_DTAPHib',\n",
    "                data=stool_meta.query(\"VisitCode == 'V5'\"))\n",
    "plt.xlabel('Stool Genus Evenness')\n",
    "plt.ylabel('Meidan DTAPHib Titer')\n",
    "plt.savefig(\"../figures/2_mo_kraken_evenness_1_yr_dtaphib_correlation.pdf\", bbox_inches='tight', dpi=300) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "387b8bb0-f5f2-469c-8fd7-f4b326bbb393",
   "metadata": {},
   "source": [
    "## Combined analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2fe9cb64-807e-4fa6-b0e1-3770cc2ce54f",
   "metadata": {},
   "outputs": [],
   "source": [
    "titer_stats = pd.concat([nasal_titer_stats, stool_titer_stats]).sort_values('p_value')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0052e66a-f697-4c53-b7f7-ee74b079615d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.535735</td>\n",
       "      <td>0.000030</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.459858</td>\n",
       "      <td>0.000468</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>58.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.430231</td>\n",
       "      <td>0.000837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.385859</td>\n",
       "      <td>0.003956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>58.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.372909</td>\n",
       "      <td>0.004278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.004630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>321.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.013037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.376388</td>\n",
       "      <td>0.014020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>45.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360627</td>\n",
       "      <td>0.014950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360163</td>\n",
       "      <td>0.017674</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>119</th>\n",
       "      <td>stool</td>\n",
       "      <td>V11</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.019051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>112</th>\n",
       "      <td>stool</td>\n",
       "      <td>V11</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>18.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.019051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.356053</td>\n",
       "      <td>0.019110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.366604</td>\n",
       "      <td>0.019979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.355968</td>\n",
       "      <td>0.020686</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>stool</td>\n",
       "      <td>V2</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>157.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.022321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.582143</td>\n",
       "      <td>0.022794</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.345434</td>\n",
       "      <td>0.025053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.571429</td>\n",
       "      <td>0.026063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>stool</td>\n",
       "      <td>V2</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.028014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>76</th>\n",
       "      <td>stool</td>\n",
       "      <td>V2</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>154.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.031271</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>stool</td>\n",
       "      <td>V10</td>\n",
       "      <td>ko_richness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>32.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.380180</td>\n",
       "      <td>0.031842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.553571</td>\n",
       "      <td>0.032287</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V1</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.459740</td>\n",
       "      <td>0.036008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>166</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.294932</td>\n",
       "      <td>0.037596</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.539286</td>\n",
       "      <td>0.038022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.331377</td>\n",
       "      <td>0.039327</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>4.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>38.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.039560</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>stool</td>\n",
       "      <td>V11</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>5.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>22.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.039663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.327126</td>\n",
       "      <td>0.042079</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V10</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>55.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.272346</td>\n",
       "      <td>0.046334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>stool</td>\n",
       "      <td>V4</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.514286</td>\n",
       "      <td>0.049839</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "44      nasal       V10            MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "32      nasal       V10      n_otus_div      median_mmNorm_PCV    NaN    NaN   \n",
       "124     stool        V5  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "42      nasal       V10            MDS2          median_mmNorm    NaN    NaN   \n",
       "38      nasal       V10     shannon_div      median_mmNorm_PCV    NaN    NaN   \n",
       "30      nasal       V10      n_otus_div          median_mmNorm    NaN    NaN   \n",
       "207     stool        V9         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "50      stool        V7  genus_richness                LVR/NVR   11.0   39.0   \n",
       "192     stool        V9     ko_evenness          median_mmNorm    NaN    NaN   \n",
       "283     stool        V6     ko_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "147     stool        V5         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "119     stool       V11         ko_MDS2                LVR/NVR    5.0   22.0   \n",
       "112     stool       V11   genus_shannon                LVR/NVR    5.0   22.0   \n",
       "148     stool        V5         ko_MDS2  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "149     stool        V5         ko_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "186     stool        V9   genus_shannon          median_mmNorm    NaN    NaN   \n",
       "78      stool        V2         ko_MDS1                LVR/NVR    6.0   33.0   \n",
       "21      stool        V4     kraken_MDS2          median_mmNorm    NaN    NaN   \n",
       "183     stool        V9  genus_evenness          median_mmNorm    NaN    NaN   \n",
       "4       stool        V4  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "74      stool        V2     ko_evenness                LVR/NVR    6.0   33.0   \n",
       "76      stool        V2     kraken_MDS1                LVR/NVR    6.0   33.0   \n",
       "69      stool       V10     ko_richness          median_mmNorm    NaN    NaN   \n",
       "3       stool        V4  genus_evenness          median_mmNorm    NaN    NaN   \n",
       "154     nasal        V1   simpson_e_div  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "166     stool        V7      ko_shannon  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "27      stool        V4         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "209     stool        V9         ko_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "0       stool        V4  genus_richness                LVR/NVR    4.0   11.0   \n",
       "111     stool       V11  genus_evenness                LVR/NVR    5.0   22.0   \n",
       "194     stool        V9     ko_evenness      median_mmNorm_PCV    NaN    NaN   \n",
       "41      nasal       V10            MDS1      median_mmNorm_PCV    NaN    NaN   \n",
       "23      stool        V4     kraken_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "\n",
       "        N   stat         R   p_value  \n",
       "44   55.0    NaN -0.535735  0.000030  \n",
       "32   55.0    NaN  0.459858  0.000468  \n",
       "124  43.0    NaN -0.501134  0.000619  \n",
       "42   58.0    NaN -0.430231  0.000837  \n",
       "38   55.0    NaN  0.385859  0.003956  \n",
       "30   58.0    NaN  0.372909  0.004278  \n",
       "207  42.0    NaN  0.428571  0.004630  \n",
       "50    NaN  321.0       NaN  0.013037  \n",
       "192  42.0    NaN  0.376388  0.014020  \n",
       "283  45.0    NaN -0.360627  0.014950  \n",
       "147  43.0    NaN -0.360163  0.017674  \n",
       "119   NaN   18.0       NaN  0.019051  \n",
       "112   NaN   18.0       NaN  0.019051  \n",
       "148  43.0    NaN -0.356053  0.019110  \n",
       "149  40.0    NaN -0.366604  0.019979  \n",
       "186  42.0    NaN  0.355968  0.020686  \n",
       "78    NaN  157.0       NaN  0.022321  \n",
       "21   15.0    NaN -0.582143  0.022794  \n",
       "183  42.0    NaN  0.345434  0.025053  \n",
       "4    15.0    NaN -0.571429  0.026063  \n",
       "74    NaN   43.0       NaN  0.028014  \n",
       "76    NaN  154.0       NaN  0.031271  \n",
       "69   32.0    NaN -0.380180  0.031842  \n",
       "3    15.0    NaN -0.553571  0.032287  \n",
       "154  40.0    NaN  0.459740  0.036008  \n",
       "166  50.0    NaN -0.294932  0.037596  \n",
       "27   15.0    NaN -0.539286  0.038022  \n",
       "209  39.0    NaN  0.331377  0.039327  \n",
       "0     NaN   38.0       NaN  0.039560  \n",
       "111   NaN   22.0       NaN  0.039663  \n",
       "194  39.0    NaN  0.327126  0.042079  \n",
       "41   55.0    NaN -0.272346  0.046334  \n",
       "23   15.0    NaN -0.514286  0.049839  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titer_stats.query('p_value < .05')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "92462504-4b5b-4d9d-9df8-0341a760c2c8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "      <td>0.148650</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>45.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360627</td>\n",
       "      <td>0.014950</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.355968</td>\n",
       "      <td>0.020686</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.366604</td>\n",
       "      <td>0.019979</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>321.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.013037</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.356053</td>\n",
       "      <td>0.019110</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360163</td>\n",
       "      <td>0.017674</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.376388</td>\n",
       "      <td>0.014020</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.004630</td>\n",
       "      <td>0.551614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.345434</td>\n",
       "      <td>0.025053</td>\n",
       "      <td>0.601283</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.327126</td>\n",
       "      <td>0.042079</td>\n",
       "      <td>0.705573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>166</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.294932</td>\n",
       "      <td>0.037596</td>\n",
       "      <td>0.705573</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.331377</td>\n",
       "      <td>0.039327</td>\n",
       "      <td>0.705573</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "124     stool        V5  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "283     stool        V6     ko_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "186     stool        V9   genus_shannon          median_mmNorm    NaN    NaN   \n",
       "149     stool        V5         ko_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "50      stool        V7  genus_richness                LVR/NVR   11.0   39.0   \n",
       "148     stool        V5         ko_MDS2  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "147     stool        V5         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "192     stool        V9     ko_evenness          median_mmNorm    NaN    NaN   \n",
       "207     stool        V9         ko_MDS2          median_mmNorm    NaN    NaN   \n",
       "183     stool        V9  genus_evenness          median_mmNorm    NaN    NaN   \n",
       "194     stool        V9     ko_evenness      median_mmNorm_PCV    NaN    NaN   \n",
       "166     stool        V7      ko_shannon  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "209     stool        V9         ko_MDS2      median_mmNorm_PCV    NaN    NaN   \n",
       "\n",
       "        N   stat         R   p_value     p_adj  \n",
       "124  43.0    NaN -0.501134  0.000619  0.148650  \n",
       "283  45.0    NaN -0.360627  0.014950  0.551614  \n",
       "186  42.0    NaN  0.355968  0.020686  0.551614  \n",
       "149  40.0    NaN -0.366604  0.019979  0.551614  \n",
       "50    NaN  321.0       NaN  0.013037  0.551614  \n",
       "148  43.0    NaN -0.356053  0.019110  0.551614  \n",
       "147  43.0    NaN -0.360163  0.017674  0.551614  \n",
       "192  42.0    NaN  0.376388  0.014020  0.551614  \n",
       "207  42.0    NaN  0.428571  0.004630  0.551614  \n",
       "183  42.0    NaN  0.345434  0.025053  0.601283  \n",
       "194  39.0    NaN  0.327126  0.042079  0.705573  \n",
       "166  50.0    NaN -0.294932  0.037596  0.705573  \n",
       "209  39.0    NaN  0.331377  0.039327  0.705573  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vaccine_times = ['V5', 'V6', 'V7', 'V9']\n",
    "titer_stats_vax = titer_stats.query('timepoint in @vaccine_times').sort_values(['timepoint', 'div_metric', 'titer_measure'])\n",
    "titer_stats_vax['p_adj'] = p_adjust(titer_stats_vax['p_value'])\n",
    "titer_stats_vax = titer_stats_vax.sort_values('p_adj')\n",
    "titer_stats_vax.query('p_value < .05')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "da67fd63-32e4-47ec-ad7d-9925934c4281",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>321.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.013037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>52</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>298.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.051918</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>91</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>123.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.055858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>286.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.096340</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V7</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>204.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.105591</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>284.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.106107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>255.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.147017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V6</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>206.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.150048</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V5</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>8.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>156.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.156080</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>253.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.161827</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>66</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>87.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.243424</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>162.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.248907</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>161.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.262756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V7</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>358.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.285718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>158.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.307301</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>159.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.323077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V9</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>9.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>317.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.356021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V9</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>9.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>216.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.375198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V7</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>347.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.386476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>96.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.388384</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>152.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.401443</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>231.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.404193</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V7</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>252.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.436246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>99.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.445996</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>228.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.448956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V5</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>8.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>189.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.449229</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V6</td>\n",
       "      <td>shannon_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>244.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.452433</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>247.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.453602</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V9</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>9.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>233.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.562508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>144.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.572655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>177.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.598777</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>237.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.606394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V5</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>8.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>253.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.630876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>108.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.643624</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>216.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.653315</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V6</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>311.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.657349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>140.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.663720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V6</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>263.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.683739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>232.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.690534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>197.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.690534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>214.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.690757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V9</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>9.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>287.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.697040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>231.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.707875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>230.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.725369</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>112.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.741250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>112.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.741250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V5</td>\n",
       "      <td>MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>8.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>245.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.746437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V5</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>8.0</td>\n",
       "      <td>57.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>212.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.764430</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V6</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>301.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.785882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V9</td>\n",
       "      <td>simpson_e_div</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>9.0</td>\n",
       "      <td>59.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>281.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.786035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>67</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>131.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.791718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>12.0</td>\n",
       "      <td>33.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>189.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.827301</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>kraken_MDS2</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>119.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.834359</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V7</td>\n",
       "      <td>MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>11.0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>308.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.854247</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>132.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.859567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>121.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.884911</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>127.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.894993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>68</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS1</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>126.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.921149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>124.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.961524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_richness</td>\n",
       "      <td>LVR/NVR</td>\n",
       "      <td>7.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>122.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   body_site timepoint      div_metric titer_measure  N_LVR  N_NVR   N   stat  \\\n",
       "50     stool        V7  genus_richness       LVR/NVR   11.0   39.0 NaN  321.0   \n",
       "52     stool        V7   genus_shannon       LVR/NVR   11.0   39.0 NaN  298.0   \n",
       "91     stool        V6  genus_evenness       LVR/NVR   12.0   33.0 NaN  123.0   \n",
       "53     stool        V7     ko_richness       LVR/NVR   11.0   39.0 NaN  286.0   \n",
       "29     nasal        V7            MDS2       LVR/NVR   11.0   54.0 NaN  204.0   \n",
       "56     stool        V7     kraken_MDS1       LVR/NVR   11.0   39.0 NaN  284.0   \n",
       "96     stool        V6     kraken_MDS1       LVR/NVR   12.0   33.0 NaN  255.0   \n",
       "46     nasal        V6   simpson_e_div       LVR/NVR   11.0   52.0 NaN  206.0   \n",
       "22     nasal        V5     shannon_div       LVR/NVR    8.0   57.0 NaN  156.0   \n",
       "90     stool        V6  genus_richness       LVR/NVR   12.0   33.0 NaN  253.0   \n",
       "66     stool        V9     kraken_MDS1       LVR/NVR    7.0   35.0 NaN   87.0   \n",
       "42     stool        V5   genus_shannon       LVR/NVR    7.0   36.0 NaN  162.0   \n",
       "49     stool        V5         ko_MDS2       LVR/NVR    7.0   36.0 NaN  161.0   \n",
       "25     nasal        V7      n_otus_div       LVR/NVR   11.0   54.0 NaN  358.5   \n",
       "46     stool        V5     kraken_MDS1       LVR/NVR    7.0   36.0 NaN  158.0   \n",
       "95     stool        V6      ko_shannon       LVR/NVR   12.0   33.0 NaN  159.0   \n",
       "32     nasal        V9     shannon_div       LVR/NVR    9.0   59.0 NaN  317.0   \n",
       "33     nasal        V9            MDS1       LVR/NVR    9.0   59.0 NaN  216.0   \n",
       "27     nasal        V7     shannon_div       LVR/NVR   11.0   54.0 NaN  347.0   \n",
       "64     stool        V9     ko_evenness       LVR/NVR    7.0   35.0 NaN   96.0   \n",
       "40     stool        V5  genus_richness       LVR/NVR    7.0   36.0 NaN  152.0   \n",
       "97     stool        V6     kraken_MDS2       LVR/NVR   12.0   33.0 NaN  231.0   \n",
       "26     nasal        V7   simpson_e_div       LVR/NVR   11.0   54.0 NaN  252.0   \n",
       "62     stool        V9   genus_shannon       LVR/NVR    7.0   35.0 NaN   99.0   \n",
       "98     stool        V6         ko_MDS1       LVR/NVR   12.0   33.0 NaN  228.0   \n",
       "21     nasal        V5   simpson_e_div       LVR/NVR    8.0   57.0 NaN  189.0   \n",
       "47     nasal        V6     shannon_div       LVR/NVR   11.0   52.0 NaN  244.0   \n",
       "57     stool        V7     kraken_MDS2       LVR/NVR   11.0   39.0 NaN  247.0   \n",
       "34     nasal        V9            MDS2       LVR/NVR    9.0   59.0 NaN  233.0   \n",
       "41     stool        V5  genus_evenness       LVR/NVR    7.0   36.0 NaN  144.0   \n",
       "94     stool        V6     ko_evenness       LVR/NVR   12.0   33.0 NaN  177.0   \n",
       "58     stool        V7         ko_MDS1       LVR/NVR   11.0   39.0 NaN  237.0   \n",
       "23     nasal        V5            MDS1       LVR/NVR    8.0   57.0 NaN  253.0   \n",
       "61     stool        V9  genus_evenness       LVR/NVR    7.0   35.0 NaN  108.0   \n",
       "99     stool        V6         ko_MDS2       LVR/NVR   12.0   33.0 NaN  216.0   \n",
       "48     nasal        V6            MDS1       LVR/NVR   11.0   52.0 NaN  311.0   \n",
       "48     stool        V5         ko_MDS1       LVR/NVR    7.0   36.0 NaN  140.0   \n",
       "49     nasal        V6            MDS2       LVR/NVR   11.0   52.0 NaN  263.0   \n",
       "59     stool        V7         ko_MDS2       LVR/NVR   11.0   39.0 NaN  232.0   \n",
       "51     stool        V7  genus_evenness       LVR/NVR   11.0   39.0 NaN  197.0   \n",
       "93     stool        V6     ko_richness       LVR/NVR   12.0   33.0 NaN  214.0   \n",
       "30     nasal        V9      n_otus_div       LVR/NVR    9.0   59.0 NaN  287.5   \n",
       "55     stool        V7      ko_shannon       LVR/NVR   11.0   39.0 NaN  231.0   \n",
       "54     stool        V7     ko_evenness       LVR/NVR   11.0   39.0 NaN  230.0   \n",
       "69     stool        V9         ko_MDS2       LVR/NVR    7.0   35.0 NaN  112.0   \n",
       "65     stool        V9      ko_shannon       LVR/NVR    7.0   35.0 NaN  112.0   \n",
       "24     nasal        V5            MDS2       LVR/NVR    8.0   57.0 NaN  245.0   \n",
       "20     nasal        V5      n_otus_div       LVR/NVR    8.0   57.0 NaN  212.5   \n",
       "45     nasal        V6      n_otus_div       LVR/NVR   11.0   52.0 NaN  301.5   \n",
       "31     nasal        V9   simpson_e_div       LVR/NVR    9.0   59.0 NaN  281.0   \n",
       "67     stool        V9     kraken_MDS2       LVR/NVR    7.0   35.0 NaN  131.0   \n",
       "92     stool        V6   genus_shannon       LVR/NVR   12.0   33.0 NaN  189.0   \n",
       "47     stool        V5     kraken_MDS2       LVR/NVR    7.0   36.0 NaN  119.0   \n",
       "28     nasal        V7            MDS1       LVR/NVR   11.0   54.0 NaN  308.0   \n",
       "44     stool        V5     ko_evenness       LVR/NVR    7.0   36.0 NaN  132.0   \n",
       "43     stool        V5     ko_richness       LVR/NVR    7.0   36.0 NaN  121.0   \n",
       "63     stool        V9     ko_richness       LVR/NVR    7.0   35.0 NaN  127.0   \n",
       "68     stool        V9         ko_MDS1       LVR/NVR    7.0   35.0 NaN  126.0   \n",
       "45     stool        V5      ko_shannon       LVR/NVR    7.0   36.0 NaN  124.0   \n",
       "60     stool        V9  genus_richness       LVR/NVR    7.0   35.0 NaN  122.0   \n",
       "\n",
       "     R   p_value  \n",
       "50 NaN  0.013037  \n",
       "52 NaN  0.051918  \n",
       "91 NaN  0.055858  \n",
       "53 NaN  0.096340  \n",
       "29 NaN  0.105591  \n",
       "56 NaN  0.106107  \n",
       "96 NaN  0.147017  \n",
       "46 NaN  0.150048  \n",
       "22 NaN  0.156080  \n",
       "90 NaN  0.161827  \n",
       "66 NaN  0.243424  \n",
       "42 NaN  0.248907  \n",
       "49 NaN  0.262756  \n",
       "25 NaN  0.285718  \n",
       "46 NaN  0.307301  \n",
       "95 NaN  0.323077  \n",
       "32 NaN  0.356021  \n",
       "33 NaN  0.375198  \n",
       "27 NaN  0.386476  \n",
       "64 NaN  0.388384  \n",
       "40 NaN  0.401443  \n",
       "97 NaN  0.404193  \n",
       "26 NaN  0.436246  \n",
       "62 NaN  0.445996  \n",
       "98 NaN  0.448956  \n",
       "21 NaN  0.449229  \n",
       "47 NaN  0.452433  \n",
       "57 NaN  0.453602  \n",
       "34 NaN  0.562508  \n",
       "41 NaN  0.572655  \n",
       "94 NaN  0.598777  \n",
       "58 NaN  0.606394  \n",
       "23 NaN  0.630876  \n",
       "61 NaN  0.643624  \n",
       "99 NaN  0.653315  \n",
       "48 NaN  0.657349  \n",
       "48 NaN  0.663720  \n",
       "49 NaN  0.683739  \n",
       "59 NaN  0.690534  \n",
       "51 NaN  0.690534  \n",
       "93 NaN  0.690757  \n",
       "30 NaN  0.697040  \n",
       "55 NaN  0.707875  \n",
       "54 NaN  0.725369  \n",
       "69 NaN  0.741250  \n",
       "65 NaN  0.741250  \n",
       "24 NaN  0.746437  \n",
       "20 NaN  0.764430  \n",
       "45 NaN  0.785882  \n",
       "31 NaN  0.786035  \n",
       "67 NaN  0.791718  \n",
       "92 NaN  0.827301  \n",
       "47 NaN  0.834359  \n",
       "28 NaN  0.854247  \n",
       "44 NaN  0.859567  \n",
       "43 NaN  0.884911  \n",
       "63 NaN  0.894993  \n",
       "68 NaN  0.921149  \n",
       "45 NaN  0.961524  \n",
       "60 NaN  1.000000  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "titer_stats.query('timepoint in @vaccine_times and titer_measure == \"LVR/NVR\"').sort_values('p_value')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "fba24a7e-8f44-45e4-80b3-fd178396cba9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "      <td>0.037163</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>45.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360627</td>\n",
       "      <td>0.014950</td>\n",
       "      <td>0.382210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.356053</td>\n",
       "      <td>0.019110</td>\n",
       "      <td>0.382210</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>166</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_shannon</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.294932</td>\n",
       "      <td>0.037596</td>\n",
       "      <td>0.455062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.277540</td>\n",
       "      <td>0.051010</td>\n",
       "      <td>0.455062</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "124     stool        V5  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "283     stool        V6     ko_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "148     stool        V5         ko_MDS2  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "166     stool        V7      ko_shannon  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "163     stool        V7     ko_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "\n",
       "        N  stat         R   p_value     p_adj  \n",
       "124  43.0   NaN -0.501134  0.000619  0.037163  \n",
       "283  45.0   NaN -0.360627  0.014950  0.382210  \n",
       "148  43.0   NaN -0.356053  0.019110  0.382210  \n",
       "166  50.0   NaN -0.294932  0.037596  0.455062  \n",
       "163  50.0   NaN -0.277540  0.051010  0.455062  "
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtaphib_vax_stats = titer_stats.query('timepoint in @vaccine_times and titer_measure == \"median_mmNorm_DTAPHib\"').sort_values('p_value')\n",
    "dtaphib_vax_stats['p_adj'] = p_adjust(dtaphib_vax_stats['p_value'])\n",
    "dtaphib_vax_stats.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "44d858d2-0463-4cf9-a992-198b449e530d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>124</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.501134</td>\n",
       "      <td>0.000619</td>\n",
       "      <td>0.037163</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.200308</td>\n",
       "      <td>0.203407</td>\n",
       "      <td>0.504813</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>274</th>\n",
       "      <td>stool</td>\n",
       "      <td>V6</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>45.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.167980</td>\n",
       "      <td>0.270028</td>\n",
       "      <td>0.570356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm_DTAPHib</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.084602</td>\n",
       "      <td>0.559121</td>\n",
       "      <td>0.745495</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric          titer_measure  N_LVR  N_NVR  \\\n",
       "124     stool        V5  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "184     stool        V9  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "274     stool        V6  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "154     stool        V7  genus_evenness  median_mmNorm_DTAPHib    NaN    NaN   \n",
       "\n",
       "        N  stat         R   p_value     p_adj  \n",
       "124  43.0   NaN -0.501134  0.000619  0.037163  \n",
       "184  42.0   NaN  0.200308  0.203407  0.504813  \n",
       "274  45.0   NaN -0.167980  0.270028  0.570356  \n",
       "154  50.0   NaN -0.084602  0.559121  0.745495  "
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtaphib_vax_stats.query('div_metric == \"genus_evenness\"')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "3f880d9e-6244-4469-91e7-9673ceaa8393",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>149</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.366604</td>\n",
       "      <td>0.019979</td>\n",
       "      <td>0.576567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>209</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.331377</td>\n",
       "      <td>0.039327</td>\n",
       "      <td>0.576567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>194</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>39.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.327126</td>\n",
       "      <td>0.042079</td>\n",
       "      <td>0.576567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>stool</td>\n",
       "      <td>V7</td>\n",
       "      <td>kraken_MDS1</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>47.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.284574</td>\n",
       "      <td>0.052537</td>\n",
       "      <td>0.576567</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>nasal</td>\n",
       "      <td>V9</td>\n",
       "      <td>n_otus_div</td>\n",
       "      <td>median_mmNorm_PCV</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>64.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.234853</td>\n",
       "      <td>0.063916</td>\n",
       "      <td>0.576567</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint   div_metric      titer_measure  N_LVR  N_NVR     N  \\\n",
       "149     stool        V5      ko_MDS2  median_mmNorm_PCV    NaN    NaN  40.0   \n",
       "209     stool        V9      ko_MDS2  median_mmNorm_PCV    NaN    NaN  39.0   \n",
       "194     stool        V9  ko_evenness  median_mmNorm_PCV    NaN    NaN  39.0   \n",
       "170     stool        V7  kraken_MDS1  median_mmNorm_PCV    NaN    NaN  47.0   \n",
       "92      nasal        V9   n_otus_div  median_mmNorm_PCV    NaN    NaN  64.0   \n",
       "\n",
       "     stat         R   p_value     p_adj  \n",
       "149   NaN -0.366604  0.019979  0.576567  \n",
       "209   NaN  0.331377  0.039327  0.576567  \n",
       "194   NaN  0.327126  0.042079  0.576567  \n",
       "170   NaN  0.284574  0.052537  0.576567  \n",
       "92    NaN  0.234853  0.063916  0.576567  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pcv_vax_stats = titer_stats.query('timepoint in @vaccine_times and titer_measure == \"median_mmNorm_PCV\"').sort_values('p_value')\n",
    "pcv_vax_stats['p_adj'] = p_adjust(pcv_vax_stats['p_value'])\n",
    "pcv_vax_stats.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "a82142a8-d295-4bc6-8a3d-4bd1fb03dd48",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>body_site</th>\n",
       "      <th>timepoint</th>\n",
       "      <th>div_metric</th>\n",
       "      <th>titer_measure</th>\n",
       "      <th>N_LVR</th>\n",
       "      <th>N_NVR</th>\n",
       "      <th>N</th>\n",
       "      <th>stat</th>\n",
       "      <th>R</th>\n",
       "      <th>p_value</th>\n",
       "      <th>p_adj</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>207</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.428571</td>\n",
       "      <td>0.004630</td>\n",
       "      <td>0.277808</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>ko_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.376388</td>\n",
       "      <td>0.014020</td>\n",
       "      <td>0.300641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>147</th>\n",
       "      <td>stool</td>\n",
       "      <td>V5</td>\n",
       "      <td>ko_MDS2</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>43.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>-0.360163</td>\n",
       "      <td>0.017674</td>\n",
       "      <td>0.300641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>186</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_shannon</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.355968</td>\n",
       "      <td>0.020686</td>\n",
       "      <td>0.300641</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>183</th>\n",
       "      <td>stool</td>\n",
       "      <td>V9</td>\n",
       "      <td>genus_evenness</td>\n",
       "      <td>median_mmNorm</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.345434</td>\n",
       "      <td>0.025053</td>\n",
       "      <td>0.300641</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    body_site timepoint      div_metric  titer_measure  N_LVR  N_NVR     N  \\\n",
       "207     stool        V9         ko_MDS2  median_mmNorm    NaN    NaN  42.0   \n",
       "192     stool        V9     ko_evenness  median_mmNorm    NaN    NaN  42.0   \n",
       "147     stool        V5         ko_MDS2  median_mmNorm    NaN    NaN  43.0   \n",
       "186     stool        V9   genus_shannon  median_mmNorm    NaN    NaN  42.0   \n",
       "183     stool        V9  genus_evenness  median_mmNorm    NaN    NaN  42.0   \n",
       "\n",
       "     stat         R   p_value     p_adj  \n",
       "207   NaN  0.428571  0.004630  0.277808  \n",
       "192   NaN  0.376388  0.014020  0.300641  \n",
       "147   NaN -0.360163  0.017674  0.300641  \n",
       "186   NaN  0.355968  0.020686  0.300641  \n",
       "183   NaN  0.345434  0.025053  0.300641  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_vax_stats = titer_stats.query('timepoint in @vaccine_times and titer_measure == \"median_mmNorm\"').sort_values('p_value')\n",
    "cross_vax_stats['p_adj'] = p_adjust(cross_vax_stats['p_value'])\n",
    "cross_vax_stats.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb857f31-5a2f-4721-ab44-6d0df1985547",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
